package org.example.day06;

/**
 * 第二章节:2.3.1.3：使用多线程可能出现死循环
 * Question:
 *      为什么 while(isRunning == true){} 时会出现死循环
 *      while(isRunning == true){ system.out.println("进入了run") } 时不会出现死循环
 *
 * Answer:
 *      ①区分线程的工作内存 和 主内存. 线程的工作内存一般要向主内存中进行读写，来达到同步。
 *      ②m3.setRunning(false); 只是将主内存中的变量值改变，线程私有工作内存中的值还来不及同步，所以会出现死循环。
 */
public class MyThread3 extends Thread{
    private boolean isRunning = true;

    public boolean isRunning() {
        return isRunning;
    }

    public void setRunning(boolean running) {
        isRunning = running;
    }

    @Override
    public void run() {
        System.out.println("进入了run");
        System.out.println("start: " + System.currentTimeMillis());
        while(isRunning == true){
            System.out.println("a");
        }
        System.out.println("线程被停止了!");

    }

    public static void main(String[] args) {
        try {
            MyThread3 m3 = new MyThread3();
            m3.start();
            m3.sleep(1000);
            m3.setRunning(false);
            System.out.println("已经赋值为false");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
